CDKを使用してLambda関数のCloudWatch Dashboardを作成してみた。
概要
CloudWatch ダッシュボードは、カスタマイズ可能なホームページです。CloudWatchダッシュボードを使用して異なるリージョンにまたがっているリソースでも、1 つのビューでモニタリングできます。ダッシュボードでリソースのメトリクスおよびアラームを表示することができます。
この記事では、CDKを使用してLambda関数のCloudWatch Dashboardを作成してみました。ここで、次のダッシュボードウィジェットを作成しました。
- Text Widget : ダッシュボードにテキストを表示するために使用できます。
- Graph Widget : メトリックのグラフを表示するために使用できます。
- LogQuery Widget : CloudWatchログの表示に使用できます。
やってみた
CDKアプリの作成
CDKをインストールする
- 次のコマンドを使用してCDKをインストールしておきます。
npm install aws-cdk-lib
CDKアプリを作成する
- 新しいディレクトリを作成しておきます。
- CDKは、プロジェクトディレクトリの名前に基づいてソースファイルとクラスに名前を付けます。
#create new directory mkdir cloudwatch-dashboard cd cloudwatch-dashboard
- cdk initコマンドを使用してアプリを初期化しておきます。
cdk init --language typescript
Lambda関数の作成
- プロジェクトのメインディレクトリにresourcesディレクトリを作成しておきます。
mkdir resources
- resourcesディレクトリに次のPythonファイルを作成しておきます。[resources/lambda-handler.py]
def handler(event, context): if (event['status']=='success'): return { 'statusCode': 200, 'body': "SUCCESS" } else: raise Exception("Error")
AWS サービスの作成
- 新しいファイル [lib/index.ts] を作成して、作成する必要のあるAWSサービスを定義しておきます。
- ファイルに次のAWSサービスを定義しておきます。
- Lambda 関数: PythonランタイムでLambda関数を定義しておきます。
- CloudWatch Dashboard : 次のウィジェットでダッシュボードを定義しておきます。
- Text Widget : ダッシュボードのタイトルを表示します。
- Graph Widget : メトリックのグラフを表示します。 次のメトリックのグラフを作成しました。
- Invocations
- Errors
- LogQuery Widget : 最後の10のログエントリを表示します。
import { Construct } from 'constructs'; import { Runtime, Function, AssetCode } from 'aws-cdk-lib/aws-lambda'; import { StackProps} from 'aws-cdk-lib'; import { Dashboard, TextWidget, GraphWidget,LogQueryWidget } from 'aws-cdk-lib/aws-cloudwatch'; export class cloudwatchDashboardStack extends Construct { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id); //Create Lambda Function const lambdaFunction = new Function(this, "cloudwatchDashboardStack", { code: new AssetCode("resources"), handler: "lambda-handler.handler", runtime: Runtime.PYTHON_3_9, functionName: "cloudwatch-Dashboard" }); //Create CloudWatch Dashboard const dashboard = new Dashboard(this, 'dashboard', { dashboardName: 'LambdaDashboard', }); //Create Title with Text Widget dashboard.addWidgets(new TextWidget({ markdown: '# Lambda CloudWatch Dashboard', height: 2, width: 20 })); //Create Metrics Graph with Graph Widget dashboard.addWidgets(new GraphWidget({ title: "Invocations", left: [lambdaFunction.metricInvocations()], width: 20 })) dashboard.addWidgets(new GraphWidget({ title: "Errors", right: [lambdaFunction.metricErrors()], width: 20 })) //Create Widget to show Log Entries dashboard.addWidgets(new LogQueryWidget({ logGroupNames: [lambdaFunction.logGroup.logGroupName], queryLines:[ "fields @timestamp, @message", "limit 10"], width: 20, })) } }
アプリにサービスを追加する
- /lib/cloudwatch-dashboard-stack.ts ファイルに次のコードを追加しておきます。
#Import the Index file created in the previous step import * as cw from '../lib/index'; new cw.cloudwatchDashboardStack(this, 'cloudwatch-Dashboard');
CDK Deploy
- Deploy する前に、環境をブートストラップする必要があります。
- 次のコマンドを実行して、AWS環境をブートストラップしておきます。
cdk bootstrap
- CDKを展開しておきます。
cdk deploy
テストする
- コンソールでは、サービスが作成されたことを見ることができます。
Lambda Function
CloudWatch Dashboard
- ラムダ関数をテストして、メトリックとログを生成しておきます。
- ダッシュボードに表示されるグラフとログを見ることができます。
まとめ
CDKを使用してLambda関数のCloudWatch Dashboardを作成してみました。いろいろな種類のウィジェットで、他のリソースのダッシュボードを作成することができます。
Reference :